<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div class="btns">
        <button data-path="/home">首页</button>
        <button data-path="/news">新闻</button>
        <button data-path="/music">音乐</button>
    </div>
    <div id="content"></div>
    <script>
        // component切换承载的地方
        const cons = document.querySelector("#content")
        // 路由表
        const routes = [
            { path: "/home", component: "我是首页啊" },
            { path: "/news", component: "这是一个热门新闻" },
            { path: "/music", component: "周杰伦发布新歌" },
        ];
        // 获取每一个按钮
        const btns = document.querySelectorAll(".btns button")
        // 遍历按钮并绑定事件，点击切换url地址
        btns.forEach(item => {
            item.onclick = function () {
                // history.pushState的一个方法，可以在不刷新的情况下 改变浏览器地址
                history.pushState(null, null, this.dataset.path);

                // 没有监听pushState修改的事件，直接修改视图
                routes.forEach(item => {
                    if (item.path === this.dataset.path) {
                        cons.innerHTML = item.component
                    }
                })
            }
        })

        // 监听历史记录的改变，然后更新视图
        // popstate事件可以监听历史记录的改变
        // 根据当前的hash地址和路由表对比，展示内容
        window.onpopstate = function () {
            // 获取当前当前的路径地址 location.pathname
            // 去路由表判断，看哪一个路由视图符合条件，展示视图
            routes.forEach(item => {
                if (item.path === location.pathname) {
                    cons.innerHTML = item.component
                }
            })
        }
    </script>
</body>

</html>